#ifndef LIBDSP_STRUCT_H_
#define LIBDSP_STRUCT_H_

#include <stdint.h>
#include <stdarg.h>

struct VibrationSignalConfig
{
    float SC_AdjustFactor;  //矫正设置中的矫正系数
	float SC_ZeroOffset;    //矫正设置中的零点偏移
	float SC_SensorOffset;   //传感器设置中的偏移量
	float SC_AnalyzeFreqHigh;	//分析频段上限
	float SC_AnalyzeFreqLow;	//分析频段下限
	float SC_OctaveConfig;		//倍频程选项
	char SC_DataChoice[16];//参数名称	用16字节对应位（从最低位开始，目前已有特征值参数依次为第 0 位到第 60 位）
/*时域特征值
Vibration_PPV	第 0 位
Vibration_AVE	第 1 位
Vibration_ABS_AVE	第 2 位
Vibration_RMS	第 3 位
Vibration_SD	第 4 位
Vibration_Sr_AMP	第 5 位
Vibration_Variance	第 6 位
Vibration_ABS_AVE_AMP	第 7 位
Vibration_P	第 8 位
Vibration_Max	第 9 位
Vibration_Min	第 10 位
Vibration_P_Factor	第 11 位
Vibration_Pulse_Factor	第 12 位
Vibration_Margin_Factor	第 13 位
Vibration_Curve_Factor	第 14 位
Vibration_Kurtosis_Factor	第 15 位
Vibration_Kurtosis	第 16 位
Vibration_Skewness_Factor	第 17 位
Vibration_Skewness	第 18 位*/

/*频域特征值
Freq_BasePha	第 19 位
Freq_TotaldB	第 20 位
Freq_HighdB	第 21 位
Freq_LowdB	第 22 位
octavedB	第 23 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
Freq_VelocityRMS	第 24 位
Freq_AverageVoltage	第 25 位
Freq_DisplacementRMS	第 26 位
intensity	第 27 位
Freq_FC	第 28 位
Freq_Msf	第 29 位
Freq_Rmsf	第 30 位
Freq_Vf	第 31 位
Freq_rpm	第 32 位
feature	第 33 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
peakValue	第 35 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
Vibration_PPV	第 36 位（频谱特征值）
Vibration_AVE	第 37 位（频谱特征值）
Vibration_ABS_AVE	第 38 位（频谱特征值）
Vibration_RMS	第 39 位（频谱特征值）
Vibration_SD	第 40 位（频谱特征值）
Vibration_Sr_AMP	第 41 位（频谱特征值）
Vibration_Variance	第 42 位（频谱特征值）
Vibration_ABS_AVE_AMP	第 43 位（频谱特征值）
Vibration_P	第 44 位（频谱特征值）
Vibration_Max	第 45 位（频谱特征值）
Vibration_Min	第 46 位（频谱特征值）
Vibration_P_Factor	第 47 位（频谱特征值）
Vibration_Pulse_Factor	第 48 位（频谱特征值）
Vibration_Margin_Factor	第 49 位（频谱特征值）
Vibration_Curve_Factor	第 50 位（频谱特征值）
Vibration_Kurtosis_Factor	第 51 位（频谱特征值）
Vibration_Kurtosis	第 52 位（频谱特征值）
Vibration_Skewness_Factor	第 53 位（频谱特征值）
Vibration_Skewness	第 54 位（频谱特征值）
*/

/*时频谱
rawAccData	第 55 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
accelerationFFTAmpDB	第 56 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
accelerationFFTAmp	第 57 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
dspFFTPha	第 58 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
accelerationFFTPower	第 59 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）
velocityFFTAmp	第 60 位（由于是指针类型，这里仅表示其启用位，实际处理更复杂）*/
};

struct VibrationChannelConfig
{
    uint32_t CC_ChannelNum;    //通道号
    uint32_t CC_ChannelType;   //通道类型
	uint32_t CC_SampleMode;   //采样方式 0:64倍频X16周期 1:32倍频X32周期 2:16倍频X64周期 3:不跟随转速
    int CC_WindowTap;          //窗函数选择，1:hanning窗；2:hamming窗；3:blackman窗；4:flapttop窗；5:不加窗；6:Kaiser窗
    float CC_Magnification;    //  通道放大倍数
    float CC_Sensitivity;     //灵敏度
    float CC_Rpm;              //通道对应设备转速(实测转速或虚拟转速)
	float CC_Samplerate;    //采样频率
	float CC_Samplepoint;    //采样点数
	float CC_FilterOrder;    //滤波阶数
	float CC_Filterfc;       //滤波截至频率
}; 


struct VibrationTimeEigenvalue{
	float Vibration_PPV;//peak-peak value 峰峰值	(位移单位um，加速度单位m/s2)
	float Vibration_AVE;//average value	平均值		(位移单位um，加速度单位m/s2）
	float Vibration_ABS_AVE;//absolute average 均值绝对值	(位移单位um，加速度单位m/s2）
	float Vibration_RMS;//root mean square 均方根	(位移单位um，加速度单位m/s2）
	float Vibration_SD;//standard deviation 标准差	(位移单位um，加速度单位m/s2）
	float Vibration_Sr_AMP;//square root amplitude 方根幅值	(位移单位um，加速度单位m/s2）
	float Vibration_Variance;//variance 方差	(位移单位um，加速度单位m/s2）
	float Vibration_ABS_AVE_AMP;//absolute average amplitude 绝对平均幅值	(位移单位um，加速度单位m/s2)
	float Vibration_P;//peak value 峰值 (位移单位um，加速度单位m/s2）
	float Vibration_Max;//maximum 最大值(位移单位um，加速度单位m/s2）
	float Vibration_Min;//minimum 最小值(位移单位um，加速度单位m/s2）
	float Vibration_P_Factor;// peak value factor 峰值因子
	float Vibration_Pulse_Factor;//pulse factor 脉冲因子
	float Vibration_Margin_Factor;//margin factor 裕度因子
	float Vibration_Curve_Factor;//curve factor 波形因子
	float Vibration_Kurtosis_Factor;// kurtosis factor 峭度因子
	float Vibration_Kurtosis;// kurtosis 峭度
	float Vibration_Skewness_Factor;//skewness factor 偏度因子
	float Vibration_Skewness;//skewness 偏度
}VibrationTimeEigenvalue_t;

struct VibrationFrequencyEigenvalue{
	    float Amplitude;
        float Phase;
		float Frequency;
};

struct LibVibrationdspDisplacementFeature{
        float Amplitude;
        float Phase;
};

struct LibVibrationFreqValue{//频域数据处理结果
	float Freq_BasePha;//基频相位 单位°    20220331
	float Freq_TotaldB;//振动加速度总值
	float Freq_HighdB;//高频段总值
	float Freq_LowdB;//低频段总值
	float *octavedB;//倍频程
	float Freq_VelocityRMS;//单向速度RMS值，用于计算烈度 单位mm/s
	float Freq_AverageVoltage;//平均电压 单位V
	float Freq_DisplacementRMS;//加速度积分成位移有效值，单位um
	float intensity;//烈度
	float Freq_FC;//重心频率
    float Freq_Msf; //均方频率
	float Freq_Rmsf;  //均方根频率
	float Freq_Vf; //频率方差
    float Freq_rpm;//跟随转速值
	struct VibrationFrequencyEigenvalue *feature; //自定义个倍频值
	struct VibrationFrequencyEigenvalue *peakValue; //频谱自定义个峰值
    struct VibrationTimeEigenvalue featureValue;//频谱特征值（频谱幅值过时域算法）
};

struct LibVibrationdspMachineIntensityResult{//机组总烈度值
	float intensity;
};

struct LibVibrationdspSinSpecData{//速度/加速度数据处理结果
	/* 通用 */
	float *rawAccData;  			//	原始数据
	float *accelerationFFTAmpDB;    //	FFT频谱，单位：dB
	float *accelerationFFTAmp;     	//	FFT频谱
	float *dspFFTPha;			//  FFT相位谱
	float *accelerationFFTPower;    //	功率谱
	float *velocityFFTAmp;        	//	速度谱
};

struct CalResult{
	struct LibVibrationdspSinSpecData *sinSpecData;
	struct LibVibrationFreqValue *freqData;
	struct VibrationTimeEigenvalue *timeEigenData;
	struct LibVibrationdspMachineIntensityResult *machineIntensity;
}

#endif /* LIBDSP_STRUCT_H_ */
